#include  <stdint.h>
#include  "mid_lcd.h"
#include  "mid_key.h"
#include  "mid_beep.h"
#include  "mid_bus.h"
#include  "mid_timer.h"
#include	"driver.h"
#include  "app.h"

static void disp_ui_v(uint8 dis1, uint8 dis2, uint8 dis3)
{
		if(UIoperate.CodeFlag)
			mid_lcdbianma(DISPON);
		else
			mid_lcdbianma(DISPOFF);

		if(UIoperate.SetFlag)
			mid_lcdshezhi(DISPON);
		else
			mid_lcdshezhi(DISPOFF);
		
	  if(UIoperate.Correct)
			mid_lcdzhengque(DISPON);
		else
			mid_lcdzhengque(DISPOFF);	

	  if(UIoperate.LockFlag)
			mid_lcdsuoding(DISPON);
		else
			mid_lcdsuoding(DISPOFF);	
		
		if(UIoperate.Wrong)
			mid_lcdcuowu(DISPON);
		else
			mid_lcdcuowu(DISPOFF);	
		
		if(UIoperate.Addr)
			mid_lcddizhi(DISPON);
		else
			mid_lcddizhi(DISPOFF);
		
		if(UIoperate.RdFlag)
			mid_lcdduchu(DISPON);
		else
			mid_lcdduchu(DISPOFF);
		
		if(UIoperate.WrFlag)
			mid_lcdxieru(DISPON);
		else
			mid_lcdxieru(DISPOFF);
		
		if(UIoperate.ContinuesFlag)
			mid_lcdlianxu(DISPON);
		else
			mid_lcdlianxu(DISPOFF);
		
		mid_lcddisp_line2(UIpos[3], UIpos[4], UIpos[5]);
		UIpos[0] = 15;//F
		UIpos[1] = UIoperate.NowSet/10;//
		UIpos[2] = UIoperate.NowSet%10;//		
	  mid_lcddisp_line1(UIpos[0], UIpos[1], UIpos[2]);
		
		mid_lcdp4(DISPON);
	  strLcdD.frush = 1;

}
			 
			 
void UI_IR(void)
{	
      if(GetKey(KEY_PRESS_UP))   
			{						
							BEEP_ON();												
							BUS_WORK();
							UIoperate.Addr = 0;
							UIoperate.Data = 0;
							UIoperate.Wrong = 0;
							UIoperate.Correct = 0;
							UIoperate.RdFlag = 0;
							UIoperate.WrFlag = 0;
							switch (valuekey.val)
							 {
									case 0x21:										//READ     						
									break;
																		
									case 0x23:     								//0
									case 0x31:     								//7
									case 0x33:   									//8
									case 0x35:    								//9
									case 0x41:      							//4
									case 0x43:      							//5
									case 0x45:      							//6
									case 0x53:      							//2
									case 0x55:      							//3
									case 0x51:      							//1	
																						
												ADDR[UIposition++] = ConvertKey(valuekey.val);		
												if(UIposition == 1)
												{
													UIpos[3] = 0;
													UIpos[4] = 0;
													UIpos[5] = ADDR[UIposition - 1];
												}else if(UIposition == 2)
												{											
													UIpos[3] = 0;
													UIpos[4] = ADDR[UIposition - 2];
													UIpos[5] = ADDR[UIposition - 1];
												}else if(UIposition == 3)
												{													
													UIpos[3] = ADDR[UIposition - 3];	
													UIpos[4] = ADDR[UIposition - 2];
													UIpos[5] = ADDR[UIposition - 1];
													ADDR[0]=ADDR[1]=ADDR[2]=0;
													UIposition = 0;
												}												
												UIaddr = 	UIpos[3]*100 + UIpos[4]*10 + UIpos[5];
												disp_ui_v(UIpos[3], UIpos[4], UIpos[5]);
												break;
																					
									case 0x25:     								//WRITE									
												BUS_WORK();
												Voltage_time = 8;
												delay_ms(30);
												if((UIaddr<255) && (UIaddr>0))
												{	
													IrProcessWrite(&Wave_TXBUF,0x40, 0, UIaddr);
													ADDR[0]=ADDR[1]=ADDR[2]=0;
													UIposition = 0;
													disp_ui_v(UIpos[3], UIpos[4], UIpos[5]);
												}																							
												break;
																						
									case 0x27:     
												break;

									case 0x37:      							//LIGHT									
											  if(UIoperate.Backlight == 0)
											  {
												  UIoperate.Backlight = 1;
												  LCDBLACKON(); 
											  }
											  else
											  {
											 	  UIoperate.Backlight = 0;
											 	  LCDBLACKOFF();											 
											  }
												break;

									case 0x47: 										//TEST										 
											 UINUM = 1;						
											 break;									
								
									case 0x57: 					 					//SET									
												UINUM++;
												UINUM = UINUM % UINUM_MAX;
												break;
																		
									case 0x11: 					 					//ESC
												UIoperate.Wrong = 0;
												UIoperate.Correct = 0;
												IrProcessWrite(&Wave_TXBUF,0x61, 0, 0);	
												IrProcessWrite(&Wave_TXBUF,0x61, 0, 0);
//														if(UIoperate.IR_Start != 0)
//														{
//														 UIoperate.IR_Start = 0;
//														 IrProcessWrite(&Wave_TXBUF,0x61, 0, 0);															 
//														}
												break;
									
									case 0x13: 					 					//CONTINUE
												break;
									
									case 0x15: 					 					//OK
												UIoperate.Wrong = 0;
												UIoperate.Correct = 0;
												IrProcessWrite(&Wave_TXBUF,0x60, 0, 0);
												IrProcessWrite(&Wave_TXBUF,0x60, 0, 0);
	//													 if(UIoperate.IR_Start == 0)
	//													 {
	//														 UIoperate.IR_Start = 1;
	//														 IrProcessWrite(&Wave_TXBUF,0x60, 0, 0);																											 
	//													 }
																																														 
												break;
									
									case 0x17: 					 					//CODE											
												UINUM = 2;
												break;				 
							 }			 											
	}
	
		if(strLcdD.UIinit)
		{
			strLcdD.UIinit = 0;
			UIoperate.Correct = 0;
			UIoperate.ContinuesFlag = 0;
			UIoperate.Wrong = 0;
			UIoperate.Addr = 0;
			UIoperate.SetFlag = 1;
			UIoperate.CodeFlag = 0;
			UIoperate.NowSet = 1;
			UIoperate.LockFlag = 1;
      UIoperate.NowSet = 3;
			UIoperate.RdFlag = 0;
			UIoperate.WrFlag = 0;
			UIpos[3] = 0;
			UIpos[4] = 0;
			UIpos[5] = 0;
			ADDR[0]=ADDR[1]=ADDR[2]=0;
		}
		
		disp_ui_v(UIpos[3], UIpos[4], UIpos[5]);
		strLcdD.UIfresh = 0;	
	}

